/*
 * Created by Federico Pisarello - SisDev Software (c) 2013 - fpisarello@sisdevsoft.com
 */

var popForm = 'pickingPop.php';
var popItemForm = 'pickingItemPop.php';
var actionForm = 'pickingAction.php';

var joDataPicking;
var joDataItemPicking;
var joDataPedido;
var oTable;
var oTableItem;
var oTablePiezas;
var oTablePedidos;

var jaItems = [];
var jaPiezas = [];

/** Variable of tracking the IndexPK **/
var actionPK = undefined;
var actionPedidoPK = undefined;
var action = undefined;
var actionPKItem = undefined;

function $_init()
{	
	var gaiSelected;
	
	$(document).ready(function() {
		oTablePedidos = $('#dt_pedidos').dataTable( {
					"bJQueryUI": true,
					"sPaginationType": "two_button",
					"bInfo": false,
					"bLengthChange": false,
					"bProcessing": true,
					"bStateSave": true,
					"bAutoWidth": false,
					"bServerSide": true,
					"sAjaxSource": actionForm + "?accion=searchPedidos",
					"fnRowCallback": function( nRow, aData, iDisplayIndex ) {
						if ( jQuery.inArray(aData[0], gaiSelected) != -1 )
						{
					        $(nRow).addClass('row_selected');
						}
						return nRow;
					},
					"aoColumns": [
					            null,
					  			null,
					  			null,
					  			null,
					  			null
					  		]
				});
		
    	    	
    	/* Click event handler */
    	$('#dt_pedidos tbody tr').live('click', function () {
    		var aData = oTablePedidos.fnGetData(this);
    		var iId = aData[0];
    		actionPedidoPK = aData[0];
    		
    		gaiSelected =  [];
    		if ( $(this).hasClass('row_selected') ) {
	            $(this).removeClass('row_selected');
	            actionPedidoPK = undefined;
	        }
	        else {
	        	oTablePedidos.$('tr.row_selected').removeClass('row_selected');
	            $(this).addClass('row_selected');
	            gaiSelected[gaiSelected.length++] = iId;
	        }
    	} );

	});
	
	$(document).ready(function() {
    	oTable = $('#dt_picking').dataTable( {
					"bJQueryUI": true,
					"sPaginationType": "two_button",
					"bInfo": false,
					"bLengthChange": false,
					"bProcessing": true,
					"bAutoWidth": false,
					"bServerSide": true,
					"sAjaxSource": actionForm + "?accion=search",
					"fnRowCallback": function( nRow, aData, iDisplayIndex ) {
						if ( jQuery.inArray(aData[0], gaiSelected) != -1 )
						{
					        $(nRow).addClass('row_selected');
						}
						return nRow;
					},
					"aoColumns": [
					            null,
					  			null,
					  			null,
					  			null,
					  			null,
					  			null
					  		]
				});
    	
    	$('#dt_picking tbody td img').live( 'click', function () {
    		var nTr = $(this).parents('tr')[0];
    		if (oTable.fnIsOpen(nTr) )
    		{
    			/* This row is already open - close it */
    			this.src = "images/details_open.png";
    			oTable.fnClose( nTr );
    		}
    		else
    		{            
    			/* Open this row */            
    			this.src = "images/details_close.png";            
    			oTable.fnOpen( nTr, fnFormatDetailsPicking(oTable, nTr), 'details' );        
    		}    
    	});
    	
    	/* Click event handler */
    	$('#dt_picking tbody tr').live('click', function () {
    		var aData = oTable.fnGetData(this);
    		var iId = aData[0];
    		actionPK = aData[0];
    		
    		gaiSelected =  [];
    		if ( $(this).hasClass('row_selected') ) {
	            $(this).removeClass('row_selected');
	            actionPK = undefined;
	        }
	        else {
	            oTable.$('tr.row_selected').removeClass('row_selected');
	            $(this).addClass('row_selected');
	            gaiSelected[gaiSelected.length++] = iId;
	        }
    	} );

	});
	
	$("#pickingDialog").dialog({
		autoOpen:false, 
		height:'auto', 
		width:640, 
		modal: true,
		closeOnEscape: false,
		position : ['center',10],
		dialogClass:'no-close',
		beforeClose: function() { $_ClearPickingPopForm(); },
		open: function() {
			$('#pickingDialog').css('background-color','#4f4233');
		}
	});
	
	//Add Click for All Buttons in Search Form
	$("#btnAgregar").click( function(e) {
		addProxyShow();
    });
	
	$('#btnEditar').click( function(e) {
		editProxyShow();
	});
	
	$('#btnEliminar').click( function(e) {
		delProxyShow();
	});
	
	var refreshId = setInterval( function()    
			{
				if($("#pickingDialog").dialog("isOpen") === false)
					oTablePedidos.fnStandingRedraw();    
			}, 5000);

}

function fnFormatDetailsPicking(oTablePicking, nTr){
	var aData = oTablePicking.fnGetData(nTr);
	var sOut = "";
	var paramData =  "accion=searchPickingDetalle&idPicking=" + aData[0];
	
    $.ajax({
        type: 'POST',
        url: actionForm,
        data: paramData,
        async: false,
		dataType: 'html',
        success: function(strHtml)
                            {
        						sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
        						sOut += strHtml;
        						sOut += '</table>';
                            }
    });
		
	return sOut;
}

function $_initItemPop()
{	
	jaPiezas = [];
	
	//Add Click for All Buttons in Pop Form
	$('#btnCerrarItem').click( function(e) {
		$('#pickingItemDialog').dialog('close');
	});
	$('#btnGuardarItem').click( function(e) {
		$('#pickingItemPopForm').submit();
	});
	
	$('.numeric').numeric();
	$('#rubro').attr('disabled','disabled');
	
	$('#articulo').val(joDataItemPicking.descArticulo);
	$('#grupoProducto').val(joDataItemPicking.grupoProducto);
	$('#variedad').val(joDataItemPicking.variedad);
	$('#cmbTipo').val(joDataItemPicking.tipo);
	$('#cantidadPedido').val(joDataItemPicking.cantidadPedido);
	$('#unidadMedidaPedido').val(joDataItemPicking.descUnidadMedidaPedido);
	$('#grupoProducto').val(joDataItemPicking.grupoProducto);
	if(joDataItemPicking.piezas == undefined)
		jaPiezas = [];
	else
		jaPiezas = joDataItemPicking.piezas;
	
	if(joDataItemPicking.tipo == iConstTipo.MUESTRA) {
		
		$('#muestra').show();
		$('#produccion').hide();
		
		$_initItemPopValidatorMuestra();
		
		if(joDataItemPicking.cantidad != undefined)
			$('#cantidad').val(joDataItemPicking.cantidad);
		$('#cantidad').focus();
			
		$('#cantidad').change(function() {
			joDataItemPicking.cantidad = $(this).val();
		});
		
		unidadMedidaPop = new $_autoCompleteHelper({
								dataMode: 'remote',
								editMode: iConst.EDIT,
								control: 'unidadMedida',
								action: actionForm + '?accion=getUnidadesMedida&idUnidadMedidaPedido='+joDataItemPicking.idUnidadPedido,
								id: (joDataItemPicking ? joDataItemPicking.idUnidad : valueConst.NULL_VALUE),
								text: (joDataItemPicking ? joDataItemPicking.descUnidadMedida : valueConst.NULL_STRING),
								minLength: 1,
								defaultId: 1,
								defaultText: 'MTS',
								callBack: function () {
									if(unidadMedidaPop.ui != undefined) {
										joDataItemPicking.idUnidad = unidadMedidaPop.ui.id;
										joDataItemPicking.descUnidadMedida = unidadMedidaPop.ui.value;
									}
								}
							});
	}
	
	if(joDataItemPicking.tipo == iConstTipo.PRODUCCION) {
		
		$('#muestra').hide();
		$('#produccion').show();
		
		$_initItemPopValidatorProduccion();
		
		oTablePiezas = $('#dt_piezas').dataTable( {	
							"bJQueryUI": true,
							"bInfo": false,
							"bLengthChange": false,
							"bProcessing": true,
							"bScrollInfinite": true,
							"bScrollCollapse": false,
							"bPaginate": false,
							"iDisplayLength": -1,
							"bServerSide": true,
							"bSearchable":false,
							"bFilter": false,
							"bAutoWidth": false,
							"sAjaxSource": actionForm + "?accion=cargarPiezas&idArticulo=" + joDataItemPicking.idArticulo + "&variedad=" + encodeURIComponent(joDataItemPicking.variedad),
							"fnDrawCallback": function(oSettings) {
								$('.piezasClass').each(function() {
									var chkValue = $(this);
									if($.isEmptyObject(jaPiezas))
										return false;
									
									$.each(jaPiezas, function(i, value) {
										if(value == chkValue.attr('id')) {
											chkValue.attr('checked', true);
											return false;
										}
									});
								});
							},
							"aoColumns": [
							              	{"bSortable": false },
							              	{"bSortable": false },
							              	{"bSortable": false },
							              	{"bSortable": false }
										]
						});
	}
	

}

function $_initPop()
{
	$("#fecha").attr('disabled','disabled');
	$('#cliente').attr('disabled','disabled');
	
	//Add Click for All Buttons in Pop Form
	$('#btnCerrar').click( function(e) {
		$('#pickingDialog').dialog('close');
	});
	$('#btnGuardar').click( function(e) {
		$('#pickingPopForm').submit();
	});
	
	$("#pickingItemDialog").dialog({
		autoOpen:false,
		position : ['center',10],
		height:'auto', 
		width:800, 
		modal: true,
		dialogClass:'no-close',
		beforeClose: function() { $_ClearPickingItemPopForm(); },
		open: function() {
			$('#pickingItemDialog').css('background-color','#4f4233');
		}
	});
	
	jaItems = [];
		
	oTableItem = $('#dt_pickingItems').dataTable( {
					"bJQueryUI": true,
					"sDom": 'lfrtip',
					"bInfo": false,
					"bRetrieve": true,
					"bFilter": false,
					"bPaginate": false,
					"bLengthChange": false,
					"bSearchable":false,
					"bProcessing": false,
					"bAutoWidth": true,
					"bSort": false,
					"aoColumns": [
					              	null,
									null,
									null,
									null,
									null,
									null,
									null,
									null
								],
					"aaData": []
				});
	
	if(action == iConst.NEW) {
		jaItems = joDataPedido.pedidoItems;
		var d = new Date();
		var month = d.getMonth()+1;
		var day = d.getDate();
		
		//Populo la Fecha y Hora
		$("#fecha").val(((''+day).length<2 ? '0' : '') + day + '/' + ((''+month).length<2 ? '0' : '') + month + '/' + d.getFullYear());
		$('#cliente').val(joDataPedido.razonSocial);
		
		$.each(jaItems, function (index, item) {
			var arrItem = [
			               '<center><img style="cursor:pointer;" onclick="editItemProxyShow('+item.idArticulo + ', \'' + item.variedad + '\', '+ index + ')" src="images/editar.png"/></center>', 
			               item.idArticulo , 
			               item.descArticulo,
			               item.variedad,
			               item.cantidadPedido, 
			               item.descUnidadMedidaPedido,
			               '',
			               ''
			             ];
			
			oTableItem.fnAddData(arrItem);
		});
	}
	
	if(action == iConst.EDIT) {
		jaItems = joDataPicking.pickingItems;
		$("#fecha").val(joDataPicking.fecha);
		$('#cliente').val(joDataPicking.razonSocial);
		
		$.each(jaItems, function (index, item) {
			var arrItem = [
			               '<center><img style="cursor:pointer;" onclick="editItemProxyShow('+item.idArticulo + ', \'' + item.variedad + '\', '+ index + ')" src="images/editar.png"/></center>',
			               item.idArticulo , 
			               item.descArticulo,
			               item.variedad,
			               item.cantidadPedido, 
			               item.descUnidadMedidaPedido,
			               item.cantidad,
			               item.descUnidadMedida
			             ];
			
			oTableItem.fnAddData(arrItem);
		});
	}
	
	$_ValidatorSetDefaults();
	$_initPopValidator();
			
	$('#btnAgregarItem').click(function (e) {
		addItemProxyShow();
	});
}

function editItemProxyShow(idArticulo, variedad, iRow)
{
	actionPKItem = iRow;
	$.each(jaItems, function (index, item) {
		if(item.idArticulo == idArticulo && item.variedad == variedad) {
			joDataItemPicking = {
					idArticulo: item.idArticulo,
					descArticulo: item.descArticulo,
					grupoProducto: item.grupoProducto,
					variedad: item.variedad,
					tipo: item.tipo,
					cantidadPedido: item.cantidadPedido,
					idUnidadPedido: item.idUnidadMedidaPedido,
					descUnidadMedidaPedido: item.descUnidadMedidaPedido,
					cantidad: item.cantidad,
					idUnidad: item.idUnidad,
					descUnidadMedida: item.descUnidadMedida,
					piezas: item.piezas
			}
			return false;
		}
	});
	
	$('#pickingItemDialog').load(popItemForm).dialog('open');
}

function addProxyShow()
{
	if(actionPedidoPK === undefined)
	{
		$_showMessage('ALERT', 'ALERTA', 'Seleccione un Pedido de la Grilla');
		return;
	}
		
	//Reset State of action and IndexPK
	actionPK = undefined;
	action = iConst.NEW;
	oTable.$('tr.row_selected').removeClass('row_selected');
	
	var paramData =  "accion=" + iConst.NEW + "&idPedido=" + actionPedidoPK;
	
    $.ajax({
        type: 'POST',
        url: actionForm,
        data: paramData,
		dataType: 'json',
        success: function(jsonObj)
                            {
        						joDataPedido = jsonObj;
        						//Open Pop Dialog
        						$('#pickingDialog').load(popForm).dialog('open');
                            }
        });
}

function editProxyShow()
{
	if(actionPK === undefined)
	{
		$_showMessage('ALERT', 'ALERTA', 'Seleccione una Orden de Picking de la Grilla');
		return;
	}
	
	action = iConst.EDIT;
	var paramData =  "accion=" + iConst.EDIT + "&idPicking=" + actionPK;
	
    $.ajax({
        type: 'POST',
        url: actionForm,
        data: paramData,
		dataType: 'json',
        success: function(jsonObj)
                            {
        						joDataPicking = jsonObj;
        						//Open Pop Dialog
        						$('#pickingDialog').load(popForm).dialog('open');
                            }
        });
	
return true;
}

function $_savePicking(action)
{	
	$("#btnGuardar").attr('disabled','disabled');
	
	var paramData = 'accion=addOrEdit&jaItems=' + encodeURIComponent(JSON.stringify(jaItems));
	
	if(action == iConst.NEW)
		paramData += '&idPedido=' + actionPedidoPK;
	else
		paramData += '&idPicking=' + actionPK;
	
    $.ajax({
        type: 'POST',
        url: actionForm,
        data: paramData,
		dataType: 'json',
        success: function(jsonObj){
            if(jsonObj.status === 'OK'){
				$_showMessage('OK', jsonObj.status, jsonObj.msg);
				$('#pickingDialog').dialog('close');
				oTable.fnStandingRedraw();
				oTablePedidos.fnStandingRedraw();
			}
			else
				$_showMessage('ERR', jsonObj.status, jsonObj.msg);
            $("#btnGuardar").removeAttr('disabled');
        }
    });

return true;
}

function $_saveItemPicking()
{
	if(actionPKItem == undefined)
		iRow = oTableItem.fnGetData().length;
	else
		iRow = actionPKItem;
	
	var arrItem = [
	               '<center><img style="cursor:pointer;" onclick="editItemProxyShow('+joDataItemPicking.idArticulo+', \'' + joDataItemPicking.variedad + '\', ' + iRow + ')" src="images/editar.png"/></center>', 
	               joDataItemPicking.idArticulo, 
	               joDataItemPicking.descArticulo,
	               joDataItemPicking.variedad, 
	               joDataItemPicking.cantidadPedido,
	               joDataItemPicking.descUnidadMedidaPedido,
	               joDataItemPicking.cantidad,
	               joDataItemPicking.descUnidadMedida
	             ];
	
	rowItem = 0;
	$('#dt_pickingItems tbody tr').each(function () {
		var aData = oTableItem.fnGetData(this);
		var iId = aData[1];
		var iVariedad = aData[3];
		if(rowItem == iRow && iVariedad == joDataItemPicking.variedad) {
			oTableItem.fnUpdate(arrItem, this);
			isUpdated = true;
			return false;
		}
		rowItem++;
	});
			
	if(isUpdated) {
		$.each(jaItems, function (index, item) {
			if(index == iRow) {				
				item.idArticulo = joDataItemPicking.idArticulo; 
				item.descArticulo = joDataItemPicking.descArticulo;
				item.grupoProducto = joDataItemPicking.grupoProducto;
				item.variedad = joDataItemPicking.variedad;
				item.tipo = joDataItemPicking.tipo;
				item.cantidadPedido = joDataItemPicking.cantidadPedido;
				item.descUnidadMedidaPedido = joDataItemPicking.descUnidadMedidaPedido;
				item.cantidad = joDataItemPicking.cantidad;
				item.idUnidad = joDataItemPicking.idUnidad;
				item.descUnidadMedida = joDataItemPicking.descUnidadMedida;
				item.piezas = joDataItemPicking.piezas;
				return false
			}
		});
		$('#pickingItemDialog').dialog('close');
	}
}

function delProxyShow()
{
	if(actionPK === undefined)
	{
		$_showMessage('ALERT', 'ALERTA', 'Seleccione una Orden de Picking de la Grilla');
		return;
	}
	
	action = iConst.DELETE;
	
	$("#deletePickingDialog").dialog({
		autoOpen: false, 
		width:350,
		position: 'center',
		open: function () {
			$('#deletePickingDialog').css('background-color','#4f4233');
			$('#btnConfirmaEliminar').click( function(e) {
				$_del();
			});
			$('#btnSalirEliminar').click( function(e) {
				$('#deletePickingDialog').dialog('close');
			})
		}
	});
	$('#deletePickingDialog').dialog('open');	
}

function $_del()
{
	var paramData = 'accion=' + action + '&idPicking=' + actionPK;

    $.ajax({
            type: 'POST',
            url: actionForm,
            data: paramData,
			dataType: 'json',
            success: function(jsonObj)
                                {
                                    if(jsonObj.status === 'OK'){
										$_showMessage('OK', 'OK', jsonObj.msg);
										
										//Reset State of action and IndexPK
										actionPK = undefined;
										action = iConst.NEW;
										oTable.fnStandingRedraw();
										oTablePedidos.fnStandingRedraw();
									}
									else
										$_showMessage('ERR', 'ERROR', jsonObj.msg);
                                    $('#deletePickingDialog').dialog('close');
                                }
            });

return true;
}

function $_initPopValidator()
{	
	$('#pickingPopForm').validate({
		submitHandler: function() {
			$_savePicking(action);
		}, 		
		rules: {
			fecha: {required: true, minlength: 1},
			cliente: {required: true, minlength: 1}
		},
		messages: {
			fecha: {required: '', minlength: ''},
			cliente: {required: '', minlength: ''}
		}
	});
}

function $_initItemPopValidatorMuestra()
{	
	$('#pickingItemPopForm').validate({
		submitHandler: function() {
			$_saveItemPicking();
		}, 		
		rules: {
			cantidad: {required: true,minlength: 1},
			unidadMedida: {required: true,minlength: 1}
		},
		messages: {
			cantidad: {required: '',minlength: ''},
			unidadMedida: {required: '',minlength: ''}
		}
	});
}

function $_initItemPopValidatorProduccion()
{	
	$('#pickingItemPopForm').validate({
		submitHandler: function() {
			if($.isEmptyObject(jaPiezas)) {
				$_showMessage('ALERT', 'ALERTA', 'Seleccione alg&uacute;n Item de la Grilla');
				return;
			}
			$_saveItemPicking();
		}
	});
}

function $_ClearPickingPopForm()
{	
	$("#pickingDialog").empty();
}

function $_ClearPickingItemPopForm()
{
	$("#pickingItemDialog").empty();
}

function $_addRemoveItem(id, cantidad)
{
	var exist = false;
	
	if(!$.isEmptyObject(jaPiezas)) {
		$.each(jaPiezas, function(i, value) {
			if(value == id ) {
				jaPiezas.splice(i, 1);
				joDataItemPicking.cantidad -= parseFloat(cantidad);
				exist = true;
				return false;
			}
		});
	}
	if(!exist) {
		jaPiezas.push(id);
		if(joDataItemPicking.cantidad == undefined)
			joDataItemPicking.cantidad = parseFloat(cantidad);
		else
			joDataItemPicking.cantidad += parseFloat(cantidad);
	}
	joDataItemPicking.descUnidadMedida = jaPiezas.length == 1 ? "PIEZA" : "PIEZAS";
	joDataItemPicking.piezas = jaPiezas; 
}